package cn.com.yto56.coresystem.logic.msg.soa.dao.impl;

import cn.com.yto56.coresystem.common.msg.util.SysConst;
import cn.com.yto56.coresystem.common.msg.util.base.StringUtils;
import cn.com.yto56.coresystem.common.msg.util.data.DataTypeChangeTool;
import cn.com.yto56.coresystem.common.msg.util.db.BaseJdbcUtil;
import cn.com.yto56.coresystem.common.msg.util.db.IPage;
import cn.com.yto56.coresystem.common.msg.util.db.QueryPage;
import cn.com.yto56.coresystem.common.msg.util.db.dao.annotation.JdbcDao;
import cn.com.yto56.coresystem.logic.msg.soa.dao.IMsgListDao;
import cn.com.yto56.coresystem.logic.msg.soa.domain.MsgListBean;
import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

/**
 * Created by wangrui on 2017/2/15.
 */
@JdbcDao(dataSource = "msg_database")
public class MsgListDaoImpl extends BaseJdbcUtil implements IMsgListDao {

    @Override
    public IPage<MsgListBean> search(MsgListBean msgListBean, QueryPage queryPage) {
        StringBuffer sb = new StringBuffer();
        sb.append("select * from " + SysConst.T_MSG_SYS_MSGLIST + " where status='VALID' ");
        String yto_msg_sysinfo_id = msgListBean.getYto_msg_sysinfo_id();
        String yto_msg_userid = msgListBean.getYto_msg_userid();
        String yto_msg_sendstate = msgListBean.getYto_msg_sendstate();
        String yto_msg_sendtime = msgListBean.getYto_msg_sendtime();
        String yto_msg_fixed_sendtime = msgListBean.getYto_msg_fixed_sendtime();
        List<Object> args = new ArrayList<Object>();
        if (StringUtils.isNotBlank(yto_msg_sysinfo_id)) {
            sb.append(" and yto_msg_sysinfo_id=?");
            args.add(yto_msg_sysinfo_id);
        }
        if (StringUtils.isNotBlank(yto_msg_userid)) {
            sb.append(" and yto_msg_userid=?");
            args.add(yto_msg_userid);
        }
        if (StringUtils.isNotBlank(yto_msg_sendstate)) {
            sb.append(" and yto_msg_sendstate=?");
            args.add(yto_msg_sendstate);
        }
        if (StringUtils.isNotBlank(yto_msg_sendtime)) {
            sb.append(" and yto_msg_sendtime<=?");
            args.add(yto_msg_sendtime);
        }
        if (StringUtils.isNotBlank(yto_msg_fixed_sendtime)) {
            sb.append(" and yto_msg_fixed_sendtime<=?");
            args.add(yto_msg_fixed_sendtime);
        }
        Map<String, String> sortMap = new HashMap<String, String>();
        sortMap.put("create_time", DESC);
        return (IPage<MsgListBean>) this.queryByPageMS(sb.toString(), args, queryPage.getPageSize(), queryPage.getPageIndex(), sortMap, new RowMapper<MsgListBean>() {
            public MsgListBean mapRow(ResultSet rs, int arg1) throws SQLException {
                MsgListBean msgListBean = new MsgListBean();
                msgListBean.setId(rs.getInt("id"));
                msgListBean.setYto_msg_sysinfo_id(rs.getString("yto_msg_sysinfo_id"));
                msgListBean.setYto_msg_userid(rs.getString("yto_msg_userid"));
                msgListBean.setYto_msg_msginfo(rs.getString("yto_msg_msginfo"));
                msgListBean.setYto_msg_fixed_sendtime(rs.getString("yto_msg_fixed_sendtime"));
                msgListBean.setYto_msg_sendstate(rs.getString("yto_msg_sendstate"));
                msgListBean.setYto_msg_sendtime(rs.getString("yto_msg_sendtime"));
                msgListBean.setCreate_time(rs.getTimestamp("create_time"));
                msgListBean.setUpdate_time(rs.getTimestamp("update_time"));
                return msgListBean;
            }
        });
    }

    @Override
    public boolean searchForUpdate(MsgListBean msgListBean) {
        return checkForUpdate(SysConst.T_MSG_SYS_MSGLIST, DataTypeChangeTool.beanToMap(msgListBean));
    }

    @Override
    public int delete(MsgListBean MsgListBean) {
        int result = 0;
        Map setMap = new HashMap();
        setMap.put("status", "INVALID");
        setMap.put("update_time", new Date());
        Map map = DataTypeChangeTool.beanToMap(MsgListBean);
        result = updateData(SysConst.T_MSG_SYS_MSGLIST, setMap, map, false);
        String sys_remark = (String) map.remove("yto_msg_sys_remark");
        if (StringUtils.isNotBlank(sys_remark)) {
            setMap.put("yto_msg_sys_remark", sys_remark);
        }
        return result;
    }

    @Override
    public int update(MsgListBean set, MsgListBean where) {
        int result = 0;
        Map setMap = DataTypeChangeTool.beanToMap(set);
        Map whereMap = DataTypeChangeTool.beanToMap(where);
        result = updateData(SysConst.T_MSG_SYS_MSGLIST, setMap, whereMap, false);
        return result;
    }

    @Override
    public int add(MsgListBean MsgListBean) {
        int result = 0;
        Map map = DataTypeChangeTool.beanToMap(MsgListBean);
        result = insertData(SysConst.T_MSG_SYS_MSGLIST, map);
        return result;
    }

    @Override
    public int addForGroup(Map map) {
        String sql = "insert into " + SysConst.T_MSG_SYS_MSGLIST + " (yto_msg_sysinfo_id,yto_msg_userid,yto_msg_msginfo,yto_msg_sendstate,yto_msg_fixed_sendtime,create_time)\n" +
                "select ?,yto_msg_userid,?,'0',?,? from t_msg_sys_usergroupinfo where status='VALID' and yto_msg_usergroupid=?";
        List args = new ArrayList();
        args.add(map.get("yto_msg_sysInfo_Id"));
        args.add(map.get("yto_msg_msgInfo"));
        args.add(map.get("yto_msg_fixed_sendTime"));
        args.add(new Date());
        args.add(map.get("yto_msg_userGroupId"));
        return getJdbcTemplate().update(sql, args.toArray());
    }
}
